home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1999 March / EnigmA AMIGA RUN 35 (1999)(G.R. Edizioni)(IT)[!][issue 1999-03].iso / earcd / devel / vbcc-src / vcpp / cpp.h < prev    next >
C/C++ Source or Header  |  1999-01-01  |  5KB  |  162 lines

  1. #define    INS    32768        /* input buffer */
  2. #define    OBS    4096        /* outbut buffer */
  3. #define    NARG    32        /* Max number arguments to a macro */
  4. #define    NINCLUDE 32        /* Max number of include directories (-I) */
  5. #define    NIF    32        /* depth of nesting of #if */
  6. #ifndef EOF
  7. #define    EOF    (-1)
  8. #endif
  9. #ifndef NULL
  10. #define NULL    0
  11. #endif
  12.  
  13. typedef unsigned char uchar;
  14.  
  15. enum toktype { END, UNCLASS, NAME, NUMBER, STRING, CCON, NL, WS, DSHARP,
  16.         EQ, NEQ, LEQ, GEQ, LSH, RSH, LAND, LOR, PPLUS, MMINUS,
  17.         ARROW, SBRA, SKET, LP, RP, DOT, AND, STAR, PLUS, MINUS,
  18.         TILDE, NOT, SLASH, PCT, LT, GT, CIRC, OR, QUEST,
  19.         COLON, ASGN, COMMA, SHARP, SEMIC, CBRA, CKET,
  20.         ASPLUS, ASMINUS, ASSTAR, ASSLASH, ASPCT, ASCIRC, ASLSH,
  21.         ASRSH, ASOR, ASAND, ELLIPS,
  22.         DSHARP1, NAME1, DEFINED, UMINUS };
  23.  
  24. enum kwtype { KIF, KIFDEF, KIFNDEF, KELIF, KELSE, KENDIF, KINCLUDE, KDEFINE,
  25.         KUNDEF, KLINE, KERROR, KPRAGMA, KDEFINED,
  26.         KLINENO, KFILE, KDATE, KTIME, KSTDC, KEVAL };
  27.  
  28. #define    ISDEFINED    01    /* has #defined value */
  29. #define    ISKW        02    /* is PP keyword */
  30. #define    ISUNCHANGE    04    /* can't be #defined in PP */
  31. #define    ISMAC        010    /* builtin macro, e.g. __LINE__ */
  32.  
  33. #define    EOB    0xFE        /* sentinel for end of input buffer */
  34. #define    EOFC    0xFD        /* sentinel for end of input file */
  35. #define    XPWS    1        /* token flag: white space to assure token sep. */
  36.  
  37. typedef struct token {
  38.     unsigned char    type;
  39.     unsigned char     flag;
  40.     unsigned short    hideset;
  41.     unsigned int    wslen;
  42.     unsigned int    len;
  43.     uchar    *t;
  44. } Token;
  45.  
  46. typedef struct tokenrow {
  47.     Token    *tp;        /* current one to scan */
  48.     Token    *bp;        /* base (allocated value) */
  49.     Token    *lp;        /* last+1 token used */
  50.     int    max;        /* number allocated */
  51. } Tokenrow;
  52.  
  53. typedef struct source {
  54.     char    *filename;    /* name of file of the source */
  55.     int    line;        /* current line number */
  56.     int    lineinc;    /* adjustment for \\n lines */
  57.     uchar    *inb;        /* input buffer */
  58.     uchar    *inp;        /* input pointer */
  59.     uchar    *inl;        /* end of input */
  60.     int    fd;        /* input source */
  61.     int    ifdepth;    /* conditional nesting in include */
  62.     struct    source *next;    /* stack for #include */
  63. } Source;
  64.  
  65. typedef struct nlist {
  66.     struct nlist *next;
  67.     uchar    *name;
  68.     int    len;
  69.     Tokenrow *vp;        /* value as macro */
  70.     Tokenrow *ap;        /* list of argument names, if any */
  71.     char    val;        /* value as preprocessor name */
  72.     char    flag;        /* is defined, is pp name */
  73. } Nlist;
  74.  
  75. typedef    struct    includelist {
  76.     char    deleted;
  77.     char    always;
  78.     char    *file;
  79. } Includelist;
  80.  
  81. #define    new(t)    (t *)domalloc(sizeof(t))
  82. #define    quicklook(a,b)    (namebit[(a)&077] & (1<<((b)&037)))
  83. #define    quickset(a,b)    namebit[(a)&077] |= (1<<((b)&037))
  84. extern    unsigned long namebit[077+1];
  85.  
  86. enum errtype { WARNING, ERROR, FATAL };
  87.  
  88. void    expandlex(void);
  89. void    fixlex(void);
  90. void    setup(int, char **);
  91. int    gettokens(Tokenrow *, int);
  92. int    comparetokens(Tokenrow *, Tokenrow *);
  93. Source    *setsource(char *, int, char *);
  94. void    unsetsource(void);
  95. void    puttokens(Tokenrow *);
  96. void    process(Tokenrow *);
  97. void    *domalloc(int);
  98. void    dofree(void *);
  99. void    error(enum errtype, char *, ...);
  100. void    flushout(void);
  101. int    fillbuf(Source *);
  102. int    trigraph(Source *);
  103. int    foldline(Source *);
  104. Nlist    *lookup(Token *, int);
  105. void    control(Tokenrow *);
  106. void    dodefine(Tokenrow *);
  107. void    doadefine(Tokenrow *, int);
  108. void    doinclude(Tokenrow *);
  109. void    doif(Tokenrow *, enum kwtype);
  110. void    expand(Tokenrow *, Nlist *);
  111. void    builtin(Tokenrow *, int);
  112. int    gatherargs(Tokenrow *, Tokenrow **, int *);
  113. void    substargs(Nlist *, Tokenrow *, Tokenrow **);
  114. void    expandrow(Tokenrow *, char *);
  115. void    maketokenrow(int, Tokenrow *);
  116. Tokenrow *copytokenrow(Tokenrow *, Tokenrow *);
  117. Token    *growtokenrow(Tokenrow *);
  118. Tokenrow *normtokenrow(Tokenrow *);
  119. void    adjustrow(Tokenrow *, int);
  120. void    movetokenrow(Tokenrow *, Tokenrow *);
  121. void    insertrow(Tokenrow *, int, Tokenrow *);
  122. void    peektokens(Tokenrow *, char *);
  123. void    doconcat(Tokenrow *);
  124. Tokenrow *stringify(Tokenrow *);
  125. int    lookuparg(Nlist *, Token *);
  126. long    eval(Tokenrow *, int);
  127. void    genline(void);
  128. void    setempty(Tokenrow *);
  129. void    makespace(Tokenrow *);
  130. char    *outnum(char *, int);
  131. int    digit(int);
  132. uchar    *newstring(uchar *, int, int);
  133. int    checkhideset(int, Nlist *);
  134. void    prhideset(int);
  135. int    newhideset(int, Nlist *);
  136. int    unionhideset(int, int);
  137. void    iniths(void);
  138. void    setobjname(char *);
  139. #define    rowlen(tokrow)    ((tokrow)->lp - (tokrow)->bp)
  140.  
  141. extern    char *outp;
  142. extern    Token    nltoken;
  143. extern    Source *cursource;
  144. extern    char *curtime;
  145. extern    int incdepth;
  146. extern    int ifdepth;
  147. extern    int ifsatisfied[NIF];
  148. extern    int Mflag;
  149. extern    int skipping;
  150. extern    int verbose;
  151. extern    int Cplusplus;
  152. extern    Nlist *kwdefined;
  153. extern    Includelist includelist[NINCLUDE];
  154. extern    char wd[];
  155.  
  156. extern int creat(char *, int);
  157. extern int open(char *, int);
  158. extern int close(int);
  159. extern int dup2(int, int);
  160. extern int write(int, char *, size_t);
  161. extern int read(int, char *, size_t);
  162.